# !@File     :create_app.py
# !@Author   :杨双洋
# !@Time     :2024/2/5 14:18
import os
from flask import Flask

'''
create_app 是一个应用工厂函数
'''
def create_app(test_config=None):
	# 创建和配置应用程序

	'''
	创建Flask实例
	__name__ 是当前Python模块的名称。应用需要知道在哪里设置路径，使用__name__是一个方便的方法
	instance_relative_config=True 告诉应用 配置文件是相对于 instance folder 的相对路径。实例文件夹在 flaskr 包的外面，用于存放本地数据（例如配置密钥和数据库），不应当 提交到版本控制系统。

	app.config.from_mapping() 设置一个应用的 缺省配置：
	SECRET_KEY 是被Flask和扩展用于保证数据安全的。在开发过程中，为了方便可以设置为’dev‘,但是在发布的时候应当使用一个随机值来重载它。
	DATABASE SQLite 数据库文件存放路径。它位于Flask用于存放实例的 app.instance_path 之内

	app.config.from_pyfile() 使用config.py中的值来重载缺省配置，如果config.py存在的话。例如，当正式部署的时候，用于设置一个正式的 SECRET_KEY

	test_config 也会被传递给工厂，并且会替代实例配置。这样可以实现 测试和开发的配置分离，相互独立。

	os.makedirs() 可以确保 app.instance_path 存在。Flask不会自动创建实例文件夹，但是必须确保创建这个文件夹，因为数据库文件会被保存到这里

	@app.route() 创建一个简单的路由，创建了 URL/hello 和一个函数之间的关联，这个函数会返回一个响应，即 'Hello, World!' 字符串。
	'''
	app=Flask(__name__,instance_relative_config=True)
	app.config.from_mapping(
			SECRET_KEY='dev',
			DATABASE=os.path.join(app.instance_path,'flaskr.sqlite'),
	)

	if test_config is None:
		# 如果config存在并且不是测试，就加载实例配置
		app.config.from_pyfile('config.py',silent=True)
	else:
		# 传入则加载实例配置
		app.config.from_mapping(test_config)
	# 确保实例文件夹存在
	try:
		os.makedirs(app.instance_path)
	except OSError:
		pass

	@app.route('/hello')
	def hello():
		return 'hello,world,luyou    aa'

	from flaskr import db
	db.init_app(app)

	return app



